// 配置管理模块
import { dbConfigCookie, platformConfigCookie, systemConfigCookie } from './cookie'

// 默认配置
const DEFAULT_DB_CONFIG = {
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: '',
  database: ''
}

const DEFAULT_PLATFORM_CONFIG = {
  baseUrl: '',
  authorization: ''
}

const DEFAULT_SYSTEM_CONFIG = {
  autoExecuteSelectAfterParse: false
}

// 配置管理器
class ConfigManager {
  constructor() {
    this.dbConfig = { ...DEFAULT_DB_CONFIG }
    this.platformConfig = { ...DEFAULT_PLATFORM_CONFIG }
    this.systemConfig = { ...DEFAULT_SYSTEM_CONFIG }
  }
  
  // 初始化配置（从Cookie读取）
  init() {
    // 读取数据库配置
    const savedDbConfig = dbConfigCookie.get()
    if (savedDbConfig) {
      this.dbConfig = { ...this.dbConfig, ...savedDbConfig }
    }
    
    // 读取平台配置
    const savedPlatformConfig = platformConfigCookie.get()
    if (savedPlatformConfig) {
      this.platformConfig = { ...this.platformConfig, ...savedPlatformConfig }
    }
    
    // 读取系统配置
    const savedSystemConfig = systemConfigCookie.get()
    if (savedSystemConfig) {
      this.systemConfig = { ...this.systemConfig, ...savedSystemConfig }
    }
  }
  
  // 获取完整的数据库配置（包含密码）
  getDbConfig() {
    return { ...this.dbConfig }
  }
  
  // 设置数据库配置
  setDbConfig(config) {
    this.dbConfig = { ...this.dbConfig, ...config }
    
    // 保存到Cookie（现在包含密码）
    dbConfigCookie.set(this.dbConfig)
  }
  
  // 获取平台配置
  getPlatformConfig() {
    return { ...this.platformConfig }
  }
  
  // 设置平台配置
  setPlatformConfig(config) {
    this.platformConfig = { ...this.platformConfig, ...config }
    platformConfigCookie.set(this.platformConfig)
  }
  
  // 验证数据库配置是否完整
  isDbConfigValid() {
    return !!(this.dbConfig.host && this.dbConfig.port && this.dbConfig.username && this.dbConfig.password)
  }
  
  // 验证平台配置是否完整
  isPlatformConfigValid() {
    return !!(this.platformConfig.baseUrl && this.platformConfig.authorization)
  }
  
  // 获取系统配置
  getSystemConfig() {
    return { ...this.systemConfig }
  }
  
  // 设置系统配置
  setSystemConfig(config) {
    this.systemConfig = { ...this.systemConfig, ...config }
    systemConfigCookie.set(this.systemConfig)
  }
}

// 导出单例
export default new ConfigManager()